<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 链式操作的本质就是不断返回同类型的数据

        // promise的链式调用
        //   then 返回了一个promise实例

        const p = new Promise((resolve , reject) => {
            resolve(1) ;
            // reject(0) ;
        })


        // p
        // .then(res => {
        //     console.log(res);
        // })
        // .catch(err => {
        //     console.log(err);   // 捕获的是原来的失败
        // })
        // .finally(() => {
        //     console.log('我反正都会被调用');
        // })


        // then方法使用的第一种情况(回调函数没有返回值)
        // then 方法返回了一个新的p  ,默认执行resolve,但是没有实参  
        // let p2 = p.then(res => {
        //     console.log(res);   // 1
        // })

        // console.log(p2);

        // p2.then(res => {
        //     console.log(res);   // undefined
        // })


        // then方法使用的第一种情况(回调函数有返回值)
        // then 方法里面的函数有返回值的时候，这个返回值将作为新的 promise的resolve的实参
        // let p2 = p.then(res => {
        //     console.log(res);   // 1
        //     return 9
        // })

        // console.log(p2);

        // p2.then(res => {
        //     console.log(res);   // 9
        // })

        // p.then(res => {
        //     console.log(res);   // 1
        //     return 9
        // }).then(res => {
        //     console.log(res);  // 9
        // }).then(res => {
        //     console.log(res);  // undefined
        // })



        p.then(res => {
            console.log(res);   // 1
            return new Promise((resolve , reject) => {
                reject('后来的失败')
            })
        }).catch(err => {
            console.log(err);   // 此处的catch 捕获的是后来的失败
        })
        

    

    </script>
    
</body>
</html>